package com.dz.Incubator.controller;

import com.dz.Incubator.entity.BillEntity;
import com.dz.Incubator.entity.InvokeResult;
import com.dz.Incubator.utils.FileUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.FilenameUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.io.IOException;
import java.util.Date;

@RequestMapping("/api/upload")
@RestController
@Slf4j
public class UploadController {

    @Value(value = "${upload.dir}")
    private String filePath;

    @Value(value = "${upload.domain}")
    private String domain;

    @Autowired
    private HttpServletRequest request;

    @PostMapping(value = "upload")
    public InvokeResult upload(@RequestParam("file") MultipartFile file) {
        try {
            // 获取文件名
            String fileName = file.getOriginalFilename();
            // 获取文件的后缀名
            String suffixName = fileName.substring(fileName.lastIndexOf("."));
            // 根据当前时间生成新的文件名
            String newFileName = new Date().getTime() + suffixName;
            // 文件上传后的路径
            // 组装文件
            File dest = new File(filePath + File.separator + newFileName);
            // 检测是否存在目录
            if (!dest.getParentFile().exists()) {
                dest.getParentFile().mkdirs();
            }
            // 将上传的文件写入到服务器端文件夹
            file.transferTo(dest);
//            // 获取当前项目的完整url
//            String requestURL = request.getRequestURL().toString();
//            // 获取当前项目的请求路径uri
//            String requestURI = request.getRequestURI();
//            // 得到去掉了uri的路径
//            String url = requestURL.substring(0, requestURL.length() - requestURI.length() + 1);
            // 返回
            return InvokeResult.success(domain + newFileName);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }

    @PostMapping(value = "uploadBill")
    public InvokeResult uploadBill(@RequestParam("file") MultipartFile file) {
        try {
            BillEntity billEntity = new BillEntity();
            // 获取文件名
            String fileName = file.getOriginalFilename();
            billEntity.setBillName(fileName);
            // 获取文件的后缀名
            String suffixName = fileName.substring(fileName.lastIndexOf("."));
            // 根据当前时间生成新的文件名
            String newFileName = new Date().getTime() + suffixName;
            // 文件上传后的路径
            // 组装文件
            File dest = new File(filePath + File.separator + newFileName);
            // 检测是否存在目录
            if (!dest.getParentFile().exists()) {
                dest.getParentFile().mkdirs();
            }
            // 将上传的文件写入到服务器端文件夹
            file.transferTo(dest);
            billEntity.setBillUrl(domain + newFileName);
            return InvokeResult.success(billEntity);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }

    @GetMapping("getDomain")
    public InvokeResult getDomain() {
        return InvokeResult.success(domain);
    }
}
